package plugin

// Plugin 接口定义了消息推送渠道的方法
type Plugin interface {
	//TODO 场景一：如果项目内部，如果有异常，直接panic抛出，比较方便
	//TODO 场景二：做一个sdk，给外部系统使用， getUser(userId int)error
	SendMessage(info MessageInfo) error
	IsEnabled() bool
}

// MessageInfo 包含了消息推送的信息
type MessageInfo struct {
	Receiver []string
	Message  string
}

//TODO 插件动态--->消息中间件【先不考虑】
//（1）后台：管理各种渠道的配置、是否启用/禁用、查看推送的消息....；
//（2）每个渠道一个jar：如果动态扩展插件不影响原来的业务--->我把每个渠道独立打包一个jar，上传jar立即生效；卸载就失效

//TODO for 子协程

//TODO 内部接口不建议返回err，对外暴露接口才建议返回err让业务系统主动把握
